"""
什么是字符串??
    字符串就是单个字符组成的集合
 字符串: C语言中是由单个字符组成的数组,本身是不存在字符串数据类型
        python 中存在字符串数据类型 str
        java 中的字符串类型  String
"""

# 非原始字符串
# 使用单引号包含的
# 	'abc'
str1 = 'abc'
print(str1,type(str1))
str_test00001 = 'a'
print(str_test00001,type(str_test00001))
# 使用双引号包含的
# 	"abc"
str2 = "aaa"
print(str2,type(str2))
# 使用3个单引号
# 	''' abc '''
# 使用3个双引号
# 	""" abc """

str3 = "abc"\
    "bcdaf"
print(str3)
str4 = ("abc"
        "def")
print(str4)
print("===========================================================================================")
# =============================字符串的拼接=============================== #
# 字符串拼接
# 	方式1
# 		str1 + str2
# 		例如：
# 			"wangzha" + "shunzi"
# 			"wangzhashunzi"
# 	方式2
# 		str1str2
# 			直接把两个字符串放一块
# 		例如：
# 			"wangzha""shunzi"
# 			"wangzhashunzi"
# 	方式3
# 		"xxx%sxxx"%(a+b)
str5 = "xxx%sxxx"%("a"+"b")
print(str5)
# 	方式4
# 		字符串乘法
# 		"abc" * 3
# 			"abcabcabc"

# =============================字符串切片======================= #
# 字符串切片
# 	概念
# 		获取一个字符串的某个片段
# 	获取某一个字符
# 		name[下标]
# 		下标
# 			字符串中每个字符的编号
# 				座位编号
# 			注意
# 				下标越界
# 				负数下标
# 					如果为负数, 则会从尾部开始定位
# 					最后一个字符为 -1
# 	获取一个字符串片段
# 		name[起始:结束:步长]
# 		注意
# 			获取范围
# 				[起始, 结束)
# 					起始包含
# 					结束不包含
# 			默认值
# 				起始默认值: 0
# 				结束默认值: len(name)
# 					整个字符串的长度
# 				步长默认值: 1
# 			获取顺序
# 				步长 > 0
# 					从左边到右
# 				步长 < 0
# 					从右往左
# 				注意: 不能从头部跳到尾部, 或者从尾部跳到头部
# 		特殊案例
# 			反转字符串
# 			字符串[::-1]
str_test01 = "hello呀"
print(str_test01[::-1])
print(str_test01)

# =====================================字符串函数操作============================= #
# find
# 	作用
# 		查找子串索引位置
# 	语法
# 		find(sub, start=0, end=len(str))
# 	参数
# 		参数1-sub
# 			需要检索的字符串
# 		参数2-start
# 			检索的起始位置
# 			可省略, 默认0
# 		参数3-end
# 			检索的结束位置
# 			可省略, 默认len(str)
# 	返回值
# 		找到了
# 			指定索引
# 			整型
# 		找不到
# 			-1
# 	注意
# 		从左到右进行查找
# 		找到后立即停止

str6 ="abcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmn"
print(str6.find("def",0,6))

# index
# 	作用
# 		获取子串索引位置
# 	语法
# 		index(sub, start=0, end=len(str))
# 	参数
# 		参数1-sub
# 			需要检索的字符串
# 		参数2-start
# 			检索的起始位置
# 			可省略, 默认0
# 		参数3-end
# 			检索的结束位置
# 			可省略, 默认len(str)
# 	返回值
# 		找到了
# 			指定索引
# 			整型
# 		找不到
# 			异常
# 	注意
# 		从左到右进行查找
# 		找到后立即停止

# print(str6.index("ac"))

# count
# 	作用
# 		计算某个子字符串的出现个数
# 	语法
# 		count(sub, start=0, end=len(str))
# 	参数
# 		参数1-sub
# 			需要检索的字符串
# 		参数2-start
# 			检索的起始位置
# 			可省略, 默认0
# 		参数3-end
# 			检索的结束位置
# 			可省略, 默认len(str)
# 	返回值
# 		子字符串出现的个数
# 		整型

print(str6.count("def"))

# replace
# 	作用
# 		使用给定的新字符串 替换原字符串中的 旧字符串
# 	语法
# 		replace(old, new[, count])
# 	参数
# 		参数1-old
# 			需要被替换的旧字符串
# 		参数2-new
# 			替换后的新字符串
# 		参数3-count
# 			替换的个数
# 			可省略, 表示替换全部
# 	返回值
# 		替换后的结果字符串
# 	注意
# 		并不会修改原字符串本身
str7 = str6.replace("abc","aaa")
print(str7)
print(str6)

# capitalize
# 	作用
# 		将字符串首字母变为大写
# 	语法
# 		capitalize()
# 	参数
# 		无
# 	返回值
# 		首字符大写后的新字符串
# 	注意
# 		并不会修改原字符串本身
print("abc abc aaa ddd".capitalize())
# title
# 	作用
# 		将字符串每个单词的首字母变为大写
# 	语法
# 		title()
# 	参数
# 		无
# 	返回值
# 		每个单词首字符大写后的新字符串
# 	注意
# 		并不会修改原字符串本身
print("abc abc aaa ddd".title())

# ljust
# 	作用
# 		根据指定字符(1个), 将原字符串填充够指定长度
# 		l
# 			表示原字符串靠左
# 	语法
# 		ljust(width, fillchar)
# 	参数
# 		参数1-width
# 			指定结果字符串的长度
# 		参数2-fillchar
# 			如果原字符串长度 < 指定长度时
# 			填充过去的字符
# 	返回值
# 		填充完毕的结果字符串
# 	注意
# 		不会修改原字符串
# 		填充字符的长度为1
# 		只有原字符串长度 < 指定结果长度时才会填充
# center
# 	作用
# 		根据指定字符(1个), 将原字符串填充够指定长度
# 		center
# 			表示原字符串居中
# 	语法
# 		center(width, fillchar)
# 	参数
# 		参数1-width
# 			指定结果字符串的长度
# 		参数2-fillchar
# 			如果原字符串长度 < 指定长度时
# 			填充过去的字符
# 	返回值
# 		填充完毕的结果字符串
# 	注意
# 		不会修改原字符串
# 		填充字符的长度为1
# 		只有原字符串长度 < 指定结果长度时才会填充
str1 = "ab"
print(str1.center(10, "="))

# lstrip
# 	作用
# 		移除所有原字符串指定字符(默认为空白字符)
# 		l
# 			表示从左侧开始移除
# 	语法
# 		lstrip(chars)
# 	参数
# 		参数-chars
# 			需要移除的字符集
# 			表现形式为字符串
# 				"abc"
# 				表示,"a"|"b"|"c"
# 	返回值
# 		移除完毕的结果字符串
# 	注意
# 		不会修改原字符串
str2 = "bbaababababababababcabbb aaaa             xxx eeee         abc zbc              "
print(str2.lstrip("ab"))

# split
# 	作用
# 		将一个大的字符串分割成几个子字符串
# 	语法
# 		split(sep, maxsplit)
# 	参数
# 		参数1-sep
# 			分隔符
# 		参数2-maxsplit
# 			最大的分割次数
# 			可省略, 有多少分割多少
# 	返回值
# 		分割后的子字符串, 组成的列表
# 		list 列表类型
# 	注意
# 		并不会修改原字符串本身

print(str6.split("c"),type(str6.split("c")))

# join
# 	作用
# 		根据指定字符串, 将给定的可迭代对象, 进行拼接, 得到拼接后的字符串
# 	语法
# 		join(iterable)
# 	参数
# 		iterable
# 			可迭代的对象
# 				字符串
# 				元组
# 				列表
# 				...
# 	返回值
# 		拼接好的新字符串

print(str1.join("123"))

# 原始字符串
str8 = r"aasdfghjsda\njkfghgxjkd"
str9 = "D:\\nginx\\aaa.txt"
print(str9)

str10 = b"abcdefg"
print(str10)

print("付雅馨,真漂亮!!".encode("utf-8"))
print(b'\xe9\x92\x9f\xe5\x80\xa9,\xe7\x9c\x9f\xe6\xbc\x82\xe4\xba\xae!!'.decode("utf-8"))